import { defineConfig, loadEnv } from "vite";
import react from "@vitejs/plugin-react-swc";
import tailwindcss from "@tailwindcss/vite";
import svgr from "vite-plugin-svgr";

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd(), "");
  console.log(`Running in ${mode} mode, command: ${command}`);

  return {
    plugins: [
      react(),
      tailwindcss(),
      svgr({
        // svgr选项: https://react-svgr.com/docs/options/
        svgrOptions: {
          // 保留SVG的viewBox等属性
          icon: true,
          // 保留SVG元素的xmlns属性
          exportType: "named",
          // 可选：选择是否要从CSS模块中获取类名
          // namedExport: 'ReactComponent',
          // svgoConfig: {} // SVGO配置项
        },
        // 用于处理SVG文件的正则
        include: "**/*.svg",
      }),
    ],
    server: {
      port: 3000, // 设置固定端口为3000
      strictPort: true, // 如果端口被占用则直接报错，不自动尝试下一个端口
      open: true, // 启动时自动打开浏览器
      proxy: {
        "/api": {
          target: "http://rap2api.taobao.org/app/mock/323071/",
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ""),
        },
      },
    },
    // 确保环境变量可用
    define: {
      __APP_ENV__: JSON.stringify(env.APP_ENV || mode),
    },
    css: {
      // 确保CSS导入顺序得到保留
      modules: {
        localsConvention: "camelCase",
      },
      preprocessorOptions: {
        less: {
          // 支持Less变量，Ant Design 4.x使用Less
          javascriptEnabled: true,
          // 如果需要自定义主题
          modifyVars: {
            // 可以在这里添加自定义变量
            // '@primary-color': '#1DA57A',
          },
        },
      },
    },
    resolve: {
      alias: {
        "@": "/src", // 确保此别名正确配置
        "@types": "/src/types", // 新增 @types 别名
      },
    },
    // 添加 esbuild 配置，忽略 TypeScript 错误
    esbuild: {
      logOverride: { "ts-resolver-findfile": "silent" },
    },
    build: {
      // 打包时忽略 TypeScript 类型检查错误
      // 不生成 .d.ts 文件
      sourcemap: true,
      // 关闭类型检查
      typescript: {
        ignoreBuildErrors: true,
      },
    },
  };
});
